CXXFLAGS = -Wall -Werror -g
LDFLAGS = -L/usr/local/lib
LDLIBS = -lprotobuf -pthread -lgloox -lrt -lssl
CC = g++
CXX = g++
PROTOC = protoc

all: protobuf_gen cvmfs_broker

%.o: %.cc %.h
	$(CXX) $(CXXFLAGS) -c $< -o $@

broker.cc: protobuf_gen

transport.cc: protobuf_gen

broker_protocol.pb.o: broker_protocol.pb.cc
	$(CXX) $(CXXFLAGS) -c broker_protocol.pb.cc

paxos_protocol.pb.o: paxos_protocol.pb.cc
	$(CXX) $(CXXFLAGS) -c paxos_protocol.pb.cc

view_protocol.pb.o: view_protocol.pb.cc
	$(CXX) $(CXXFLAGS) -c view_protocol.pb.cc

protobuf_gen: broker_protocol.proto paxos_protocol.proto view_protocol.proto
	$(PROTOC) --python_out=. --cpp_out=. broker_protocol.proto
	$(PROTOC) --cpp_out=. paxos_protocol.proto
	$(PROTOC) --cpp_out=. view_protocol.proto
	@touch protobuf_gen

cvmfs_broker: main.o broker.o pollmgr.o transport.o smalloc.o \
        broker_protocol.pb.o protobuf_gen paxos_protocol.pb.o messaging.o \
        view.o view_protocol.pb.o timeutils.o paxos.o trace.o signature.o
	$(CXX) $(LDFLAGS) -o cvmfs_broker main.o broker.o broker_protocol.pb.o \
        transport.o pollmgr.o smalloc.o messaging.o view.o view_protocol.pb.o \
        timeutils.o paxos.o paxos_protocol.pb.o trace.o signature.o \
        $(LDLIBS)

clean:
	rm -f *.pb.h *.pb.cc *_pb2.py protobuf_gen
	rm -f *.o *.pyc
	rm -f cvmfs_broker

.PHONY : all clean
